import appConfig from '@/config/appConfig.js'
import { toErrPageFunc } from '@/util/toErrorPageUtil.js'
import { $payCancelBoardCast, $payEventBoardCast } from '@/http/apiManager.js'

function wechatH5Func(orderRes, payOrderInfo){
	
	
	let onBridgeReady = function () {

      // eslint-disable-next-line no-undef
      WeixinJSBridge.invoke( 'getBrandWCPayRequest', JSON.parse(orderRes.payInfo), function(res) {
		  
			payEventBoardCast(orderRes.payOrderId, res)
	  
			if (res.err_msg == "get_brand_wcpay_request:ok") {
			  // 使用以上方式判断前端返回,微信团队郑重提示：
			  //res.err_msg将在用户支付成功后返回ok，但并不保证它绝对可靠。
			  // //重定向
			  if(payOrderInfo.returnUrl){
				location.href = payOrderInfo.returnUrl;
			  }else{
				alert('支付成功！');
				// if(payOrderInfo.fun) return payOrderInfo.fun()	
				window.WeixinJSBridge.call('closeWindow')
			  }

			}
			if (res.err_msg == "get_brand_wcpay_request:cancel") {
			  // payCancel(orderRes.payOrderId)
			  alert("支付取消");
			  window.WeixinJSBridge.call('closeWindow')
			}
			if (res.err_msg == "get_brand_wcpay_request:fail") {
			  alert('支付失败:' + JSON.stringify(res))
			  window.WeixinJSBridge.call('closeWindow')
			}
			if (res.err_msg == "total_fee") {
			  alert('缺少参数')
			  window.WeixinJSBridge.call('closeWindow')
			}
		}
      );
    }
	
	
	if (typeof WeixinJSBridge == "undefined"){
		  if( document.addEventListener ){
			document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
		  }else if (document.attachEvent){
			document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
			document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
		  }
	}else{
		onBridgeReady();
	}
}

// 支付宝内的浏览器调起支付：https://myjsapi.alipay.com/jsapi/native/trade-pay.html
function alipayH5Func(orderRes){
	// 执行事件 
	let doAlipay = function () {
      AlipayJSBridge.call("tradePay", { tradeNO: orderRes.alipayTradeNo }, function (data) {
		payEventBoardCast(orderRes.payOrderId, data)
        if ("9000" == data.resultCode) {
          // //重定向
          if(orderRes.returnUrl){
            location.href = orderRes.returnUrl;
          }else{
            alert('支付成功！');
            window.AlipayJSBridge.call('closeWebview')
          }
          //‘8000’：后台获取支付结果超时，暂时未拿到支付结果;
        // ‘6004’：支付过程中网络出错， 暂时未拿到支付结果;
        }else if("8000" == data.resultCode || "6004" == data.resultCode){ //其他
          alert(JSON.stringify(data));
          window.AlipayJSBridge.call('closeWebview')
        }else{ ///其他异常信息， 需要取消订单
		  // payCancel(orderRes.payOrderId)
          alert('用户已取消！');
          window.AlipayJSBridge.call('closeWebview')
        }
      });
    }
	if (!window.AlipayJSBridge) {
		document.addEventListener('AlipayJSBridgeReady', doAlipay, false);
	}else{
	  doAlipay();
	}
}

function wechatLiteFunc(orderRes, payOrderInfo){
	
	const payInfo = JSON.parse(orderRes.payInfo)
	wx.requestPayment({
		"timeStamp": payInfo.timeStamp,
		"nonceStr": payInfo.nonceStr,
		"package": payInfo.package,
		"signType": payInfo.signType,
		"paySign": payInfo.paySign,
		"success": function(res){
		if(payOrderInfo.fun) return payOrderInfo.fun()	
			uni.navigateTo({
				url: '/pages/paySuccess/paySuccess?amount=' + payOrderInfo.amount + '&payOrderId=' + orderRes.payOrderId
			})
		},
		"fail": function(res){
			if(res.errMsg == 'requestPayment:fail cancel') {
				// payCancel(orderRes.payOrderId)
				toErrPageFunc('取消支付')
			}else {
				toErrPageFunc(res.errMsg)
			}
		},
		"complete": (res) => {
			payEventBoardCast(orderRes.payOrderId, res)
		}
	})
}

function alipayLiteFunc(orderRes, payOrderInfo){
	my.tradePay({
		tradeNO: orderRes.alipayTradeNo,
		success: (res) => {
			if(res.resultCode == 9000) {
				if(payOrderInfo.fun) return payOrderInfo.fun()	
				uni.navigateTo({
					url: '/pages/paySuccess/paySuccess?amount=' + payOrderInfo.amount
				})
			}else if(res.resultCode == 6001) {
				// payCancel(orderRes.payOrderId)
				toErrPageFunc('取消支付')
			}else if(res.resultCode == 4000) {
				toErrPageFunc('订单处理失败')
			}else if(res.resultCode == 4) {
				toErrPageFunc('无权限调用')
			}else {
				toErrPageFunc(JSON.stringify(res))
			}
		},
		fail: (res) => {
			toErrPageFunc(JSON.stringify(res))
		},
		complete: (res) => {
			payEventBoardCast(orderRes.payOrderId, res)
		}
	});
}

function ysfpayH5Func(orderRes){
	window.location.href = orderRes.redirectUrl
}


function payCancel(payOrderId) {
	$payCancelBoardCast(payOrderId).then(() => {
		console.log("取消支付")
	})
}

function payEventBoardCast(payOrderId, resData) {
	$payEventBoardCast(payOrderId, resData)
}


export default () => {
	
	let result = {}
	result[appConfig.PAGE_TYPE_ENUM.WECHAT_H5] = wechatH5Func;
	result[appConfig.PAGE_TYPE_ENUM.ALIPAY_H5] = alipayH5Func;
	result[appConfig.PAGE_TYPE_ENUM.WECHAT_LITE] = wechatLiteFunc;
	result[appConfig.PAGE_TYPE_ENUM.ALIPAY_LITE] = alipayLiteFunc;
	result[appConfig.PAGE_TYPE_ENUM.YSFPAY_H5] = ysfpayH5Func;

	return result;	
}